indikace textu mailu v synapsi

Otázka od: Petr Kuklik

13. 9. 2004 15:51

Dobry den,
  jak jednoznacne poznam text mailu, ktery ma prilohu? Puvodne jsem si myslel,
ze se staci oprit o property TMimePart.Disposition = INLINE, ale ta nebyva
vyplnena. Mohu se spolehnout, ze text je vzdy prvni, tedy
TMimeMess.MessagePart.GetSubPart(0)? (beru-li, ze mail ma aspon jednu prilohu)
A plati to i v pripade, ze ma mail prilohu a nema vyplneni text? Zkousel jsem
to na mailech z www.seznam.cz, www.centrum.cz, www.email.cz, podle dat z
TPOP3Send.FullResult by to tak mohlo byt.

Diky Petr Kuklik


Odpovedá: Jan Rizek

14. 9. 2004 9:38

Takhle vkladam / nevkladam prilohu... nevim zda vam to pomuze...

  m:=TMimemess.create;
  try
    if AFileName<>'' then begin
      MimeBody := M.AddPartMultiPart('mixed', nil);
      m.AddPartText(ATExt, MimeBody);
      m.AddPartBinaryFromFile( AFileName, MimeBody);
    end
    else m.AddPartText(ATExt, nil);

> Dobry den,
> jak jednoznacne poznam text mailu, ktery ma prilohu? Puvodne jsem si
myslel, ze se staci oprit o property TMimePart.Disposition = INLINE, ale ta
nebyva vyplnena. Mohu se spolehnout, ze text je vzdy prvni, tedy
TMimeMess.MessagePart.GetSubPart(0)? (beru-li, ze mail ma aspon jednu
prilohu) A plati to i v pripade, ze ma mail prilohu a nema vyplneni text?
Zkousel jsem to na mailech z www.seznam.cz, www.centrum.cz, www.email.cz,
podle dat z TPOP3Send.FullResult by to tak mohlo byt.
>
> Diky Petr Kuklik
>
>
>
>


Odpovedá: Lukas Gebauer

14. 9. 2004 11:30

> jak jednoznacne poznam text mailu, ktery ma prilohu? Puvodne jsem si
> myslel, ze se staci oprit o property TMimePart.Disposition = INLINE,
> ale ta nebyva vyplnena. Mohu se spolehnout, ze text je vzdy prvni,
> tedy TMimeMess.MessagePart.GetSubPart(0)? (ber
> u-li, ze mail ma aspon jednu prilohu) A plati to i v pripade, ze ma
> mail prilohu a nema vyplneni text? Zkousel jsem to na mailech z
> www.seznam.cz, www.centrum.cz, www.email.cz, podle dat z
> TPOP3Send.FullResult by to tak mohlo byt.

Vec neni tak jednoducha, jak vypada. musis si uvedmit, ze MIME maily
mohou obsahovat tyto zakladni druhy dat:
- text
- binarni data
- vnorena jina e-mail zprava
- multipart, ktery muze obsahovat libovolne mnozstvi dalsich casti,
vcetne dalsiho multipartu, atd.

Diky tomu jsi schopen vytvorit prakticky libovolnou stromovou
strukturu casti dopisu ruznych typu.

Zkus si ted odpovedet na mych par nasledujicich otazek:

- dopis obsahuje multipart, a ten ma v sobe textovou cast a binarni
cast. Je to priloha?

- co kryz ale obe casti jsou textove. Priloha preci muze byt take
text!

- A co kdyz druha cast je opet multipart, ktera obsahuje dalsi
multipart, ktery az obsahuje nejaky soubor. Je to priloha?

- A co kdyz tvuj dopis obsahuje vnoreny jiny dopis, ktery az obsahuje
prilohu?

- A vubec, co kdyz textova cast chybi, a dopis obsahuje jen a jen
binarni soubor. Je to priloha?

- a kdyz tam mas nejaka binarni data, treba obrazek, je to
priloha,nebo soucast treba HTML mailu?

A tak bych mohl jeste chvilku pokracovat. jak vidis, situace neni tak
ruzvova, jako na prvni pohled. V praxi identifikovat prilohu jde
opravdu velmi tezko. V praxi je mnohem dulezitejsi zjisteni, jestli
se jedna o jednoduchy dopis nebo o nejaky multipart. A druhou
dulezitou veci je zjisteni, jaky druh dat obsahuje kazda cast dopisu,
coz poznas bezpecne podle primarniho MIME typu.

Jinak k tomu Disposition, pokud obsahuje 'inline', pak ta cast dopisu
neni priloha, ale soucast slozitejsiho dokumentu v mailu. Typickym
prikladem je prave HTML mail, ktery obsahuje obrazky. Tyto obrazky
jsou v mailu jako dalsi casti dopisu, a jsou prave oznaceny tim
'inline'. Pokud by slo o prilozeny soubor uzivatelem, bylo by tam
'attachment', coz se take povazuje za default, kdyz tam tato hlavicka
vubec neni.


--
Lukas Gebauer.

E-mail: gebauerl@mlp.cz
http://www.ararat.cz/synapse/ - Ararat Synapse - TCP/IP Lib.